/*
 * La fenetre graphique de maniere gÃ©nÃ©rale
 *
 */
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.filechooser.*;


/**
 *
 * @author Nicolas
 */
public class Graphique extends JFrame implements ActionListener {
	private JPanel panPrincipal;
	private JMenuBar menuBar;

	private JMenu menuFichier;
	private JMenuItem menuCharger;
	private JMenuItem menuSauvegarder;

	private MenuPiece menuPiece;
	private MenuParamExt menuParamExt;
	private AffichePiece affichePiece;

	private Glados glados;
	private Maison maison;
	private ParseurMaison parseurMaison;

	private JFileChooser fc;
	private FileFilter xml;         

	/**
	 * Constructeur qui initialise la fenêtre graphique de base
	 * @param nom 
	 */
	public Graphique(String nom){        
		super(nom);
		panPrincipal = new JPanel(new BorderLayout());
		menuBar = new JMenuBar();
		menuFichier = new JMenu("Fichier");
		menuCharger = new JMenuItem("Charger");
		menuSauvegarder = new JMenuItem("Sauvegarder");

		menuCharger.addActionListener(this);
		menuSauvegarder.addActionListener(this);

		this.menuFichier.add(menuCharger);
		this.menuFichier.add(menuSauvegarder);
		menuSauvegarder.setEnabled(false);
		this.menuBar.add(menuFichier);
		this.setJMenuBar(menuBar);

		fc = new JFileChooser(".");
		xml =new FiltreSimple("Fichiers xml",".xml");

		fc.setFileFilter(xml);

		this.add(panPrincipal);

		ParseurMaison parseurMaison;
		Glados glados;
	}

	/**
	 * Gere les interaction avec les bouton charger et sauvegarder.
	 * @param e
	 */
	public void actionPerformed(ActionEvent e) {
		if(e.getSource().equals(menuCharger)){     

			int choix = fc.showOpenDialog(this);

			if(choix == fc.APPROVE_OPTION)
			{

				File file = fc.getSelectedFile();
				parseurMaison = new ParseurMaison();
				try {
					parseurMaison.loadFile(file.getPath());
					maison = parseurMaison.getMaison();
					glados = new Glados(parseurMaison.getListeCapteurs(), parseurMaison.getListeObjets(), parseurMaison.getListeEnergie(), maison.getListePiece().size());
					glados.verifierParam();
					afficheCharge();
					menuSauvegarder.setEnabled(true);
				} catch (BaliseXMLException e1) {
					JOptionPane.showMessageDialog(null, e1, "Erreur", JOptionPane.ERROR_MESSAGE);
				}
			}
		}
		if (e.getSource().equals(menuSauvegarder)) {

			int choix = fc.showSaveDialog(this);
			if (choix == fc.APPROVE_OPTION) {
				File file = fc.getSelectedFile();
				parseurMaison.saveFile(file.getPath());
			}
		}
	}

	public void setGlados(Glados glados){
		this.glados = glados;
	}

	public void setMaison(Maison maison){
		this.maison = maison;      
	}

	/**
	 * Affiche le reste de l'interface
	 */
	public void afficheCharge(){

		menuPiece = new MenuPiece(glados, maison);
		menuPiece.setPreferredSize(new Dimension(300,400));
		menuParamExt = new MenuParamExt(glados);
		affichePiece = new AffichePiece(menuPiece, maison);

		this.panPrincipal.add(menuPiece, BorderLayout.WEST);
		this.panPrincipal.add(menuParamExt, BorderLayout.SOUTH);
		this.panPrincipal.add(affichePiece, BorderLayout.CENTER);
		this.panPrincipal.validate();
		this.panPrincipal.repaint();
	}


	/**
	 * main qui so'ccupe de creer l'interface graphique de base.
	 * @param args
	 */
	public static void main(String[] args){
		EventQueue.invokeLater(new Runnable(){
			public void run(){      
				Graphique graph = new Graphique("Maison intelligente");
				graph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				graph.setSize(1000, 530);
				graph.setVisible(true);
				graph.setResizable(false);
			}                        
		});
	}
}